﻿using System;

namespace Utilities
{
    /// <summary>
    /// Representa una clase para el uso y manejo de objetos en general
    /// </summary>
    public class UseObject
    {
        /// <summary>
        /// Devuelve una cadena de caracteres en grupos de tres caracteres separados 
        /// por un carácter punto (.) creando la cifra significativa de miles.
        /// </summary>
        /// <param name="cadena">Cadena de caracteres a separar.</param>
        /// <returns></returns>
        public static string InsertSeparatorMil(string cadena)
        {
            char character = '.';
            var position = 3;
            var cadenaSplit = cadena.Split(',');
            if (cadenaSplit.Length > 1)
            {
                cadena = cadenaSplit[0];
            }
            var miStringChar = cadena.ToCharArray();
            string miString = "";
            int modulo = (miStringChar.Length - 1) % position;
            int i = 0;
            try
            {
                miString += miStringChar[i];
                if (modulo == 0)
                {
                    if (miStringChar.Length > 3)
                    {
                        miString += character;
                    }
                }
                else
                {
                    if (modulo == 1)
                    {
                        miString += miStringChar[i + 1];
                        if (miStringChar.Length > 3)
                        {
                            miString += character;
                        }
                    }
                    else
                    {
                        miString += miStringChar[i + 1];
                        miString += miStringChar[i + 2];
                        if (miStringChar.Length > 3)
                        {
                            miString += character;
                        }
                    }
                }
                int contador = 0;
                for (int j = modulo + 1; j < miStringChar.Length; j++)
                {
                    contador++;
                    miString += miStringChar[j];
                    if (contador % position == 0 && j < miStringChar.Length - 1)
                    {
                        miString += character;
                    }
                }
                if (cadenaSplit.Length > 1)
                {
                    miString += ",";
                    miString += cadenaSplit[1];
                }
                miStringChar = null;
                cadenaSplit = null;
                return miString;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// Devuelve un número decimal extraído de una cadena de caracteres suprimiendo el carácter punto (.).
        /// </summary>
        /// <param name="cadena">Cadena de caracteres a editar.</param>
        /// <returns></returns>
        public static double RemoveSeparatorMil(string cadena)
        {
            var cadenaSplit = cadena.Split(',');
            if (cadenaSplit.Length > 1)
            {
                cadena = cadenaSplit[0];
            }
            cadena = Convert.ToInt64(Convert.ToDouble(cadena)).ToString();
            if (cadenaSplit.Length > 1)
            {
                cadena += ",";
                cadena += cadenaSplit[1];
            }
            cadenaSplit = null;
            return Convert.ToDouble(cadena);
        }

        /// <summary>
        /// Remueve de la cadena todos los caracteres que se indique.
        /// </summary>
        /// <param name="cadena">Cadena a ser analizada.</param>
        /// <param name="character">Carácter a suprimir de la cadena.</param>
        /// <returns></returns>
        public static double RemoveCharacter(string cadena, char character)
        {
            cadena = cadena.Replace('.', ',');
            var cadenaSplit = cadena.Split(character);
            var miString = "";
            for (int i = 0; i < cadenaSplit.Length; i++)
            {
                miString += cadenaSplit[i];
            }
            cadenaSplit = null;
            var r = Convert.ToDouble(miString);
            return r;//Convert.ToDouble(miString);
        }

        /// <summary>
        /// Obtiene el conjunto de ceros dispuesto a la izquierda de un número.
        /// </summary>
        /// <param name="numero">Número a extraer los ceros.</param>
        /// <returns></returns>
        public static string CerosToLeft(string numero)
        {
            char[] num = numero.ToCharArray();
            string ceros = "";
            for (int i = 0; i < num.Length; i++)
            {
                if (num[i].Equals('0'))
                {
                    ceros += num[i];
                }
                else
                {
                    break;
                }
            }
            return ceros;
        }
    }
}